<?php

use Lib\Dao;
use Lib\Dao\UsuariosDao;
use Lib\Dao\GestoresDao;
use Lib\Dao\LogsDao;
use Lib\Utils\Funciones;
use Lib\Utils\UsuariosUtils;
use Lib\Utils\DatatablesUtils;
use Lib\Dao\PermisosDao;
use Lib\Dao\MenusDao;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;

class UsuariosController extends \BaseController {
	
	var $usuariosUtils;
	var $usuariosDao;
	var $funcionesUtils;
	
	function __construct(){
		$this->usuariosUtils = new UsuariosUtils();
		$this->usuariosDao = new UsuariosDao();
		$this->funcionesUtils = new Funciones();
	}
	
	public function index(){ }


	public function formCrearUsuario(){
		$this->layout->nest('content','usuarios.form_crear_usuario');
	}

	public function crearUsuario(){
		$this->layout = '';
		$gestoresDao = new GestoresDao();
		
		$aux = Funciones::getPost();

		$usuario['nombre'] = $aux->nom;
		$usuario['usuario'] = $aux->usuari;
		$usuario['email'] = $aux->email;
		$usuario['password'] = Hash::make($aux->pass);
		$usuario['menu_defecto'] = $this->usuariosUtils->setMenuDefecto($aux->gestor_defecto,$aux->permiso_gestor_defecto);
		if(!empty($aux->gestores)){
			$usuario['menu_sup'] = $this->usuariosUtils->setMenuSup($aux->gestores);
		}else{
			$usuario['menu_sup'] = NULL;
		}
		$usuario['rol'] = $aux->rol;
		$usuario['activo'] = true;
					
		$result = $this->usuariosDao->crearUsuario($usuario);
		echo json_encode($result);		
	}

	public function borrarUsuario(){
				
	}

	public function modificarCampoUsuario($idUsuario,$campo,$valor){
		$queryString = "";
	}

	public function configuracionUsuario(){
		$this->getMenuUsuario(); //envia a la plantilla default la variable con el html del menu por defecto
		$aux['info'] = UsuariosUtils::infoPerfilUsuario(Auth::user());
		$aux['gestores'] = json_decode(Auth::user()->menu_sup);
		$this->layout->content = View::make('usuarios.configuracion_usuario', array('perfil' => $aux)); //hace render de la vista portada/inicio en la plantilla por defecto,y envia a la vista la variable
	}
	
	public function cambioNombreUsuario(){
		if(Request::ajax()){
			$result = $this->usuariosDao->updateNombreUsuario(Auth::user()->id,$_POST['value']);
			return Response::json(array('result' =>$result));
		}
	}
	
	public function cambioPasswordUsuario(){
		
		if(Request::ajax()){
			$result = $this->usuariosDao->updatePasswordUsuario(Auth::user()->id,Hash::make($_POST['value']));
			return Response::json(array('result' =>$result));
		}
	}
	
	public function cambioEmailUsuario(){
		
		if(Request::ajax()){
			$result = $this->usuariosDao->updateEmailUsuario(Auth::user()->id,$_POST['value']); //update campo email con los parametros recibidos
			return Response::json(array('result' =>$result));
		}
	}
	
	public function getAllUsuarios(){
		$this->layout = '';
		return $this->usuariosDao->getTodosUsuarios();
	}
	
	public function getAllUsuariosDatatables(){
		$this->layout = '';
		$aux = array();
		$usuarios = $this->getAllUsuarios();
		
		foreach($usuarios as $usuario){
			/* Define segun el estado del usuario que boton aparecera para permitir la habilitacion/deshabilitacion */
			if($usuario->activo == true){ $activo = '<a class="btn btn-success btn-sm" style="width:83px;" onclick="javascript:usuarios.inhabilitar('.$usuario->id.')"><div class="fa fa-ban"> Suspender</div></a>'; }else{ $activo = '<a class="btn btn-warning btn-sm" onclick="javascript:usuarios.habilitar('.$usuario->id.')" style="width:83px;" ><div class="fa fa-check"> Activar</div></a>'; }
			$aux['data'][] = array(
					$usuario->id,
					$usuario->nombre,
					$usuario->usuario,
					$usuario->email,
					Carbon::createFromFormat('Y-m-d H:i:s',$usuario->created_at)->toDateTimeString(),
					$usuario->rol,
					'<a class="btn btn-primary btn-sm " style="width:83px;" onclick="javascript:usuarios.editar('.$usuario->id.')"><div class="fa fa-edit"> Editar</div></a> '.$activo.' <a class="btn btn-danger btn-sm" style="width:83px;" onclick="javascript:usuarios.eliminar('.$usuario->id.');"><div class="fa fa-trash-o"> Eliminar </div></a>'
			);
		}
		echo json_encode($aux);
	}
	
	public function getInfoUsuarioPorId(){
		$this->layout = '';
		$usuariosDao = new UsuariosDao();
		$gestoresDao = new GestoresDao();
		$permisosDao = new PermisosDao();
		$info['usuario'] = $usuariosDao->getUsuarioPorId($_POST['id']);
		$info['gestores'] =  $gestoresDao->getAllGestores();
		$info['permisos'] = $permisosDao->getAllPermisosUsuarios();
		echo json_encode($info);
	}
	
	public function cambioEstadoUsuario(){
		$this->layout = '';
		echo json_encode($this->usuariosDao->cambio_estado_usuario($_POST['id'],$_POST['estado']));
	}
	
	public function eliminarUsuarioPorId(){
		$this->layout = '';
		echo json_encode($this->usuariosDao->eliminar_usuario($_POST['id']));
	}
	
	public function comprobarDisponibilidad(){
		$this->layout = '';
		echo json_encode($this->usuariosDao->comprobar_disponibilidad($_POST['usuario']));
	}
	
	public function editarUsuario(){
		$this->layout = '';
		
		$gestoresDao = new GestoresDao();
		$usuariosDao = new UsuariosDao();
		$post = Funciones::getPost();
		$pass = $usuariosDao->getCampoTablaPorUsuario($post->id,'password');
		$pass_nuevo = $post->pass;
		
		if(empty($pass_nuevo) == false){ $pass = Hash::make($pass_nuevo);}

		$aux = array();
		
		$mes_gestors = str_replace("\\", "",$post->mes_gestors);

		foreach(json_decode($mes_gestors) as $gestor){
		
			$id_gestor = $gestor[0];
			$permiso = $gestor[1];
			$aux[] = $id_gestor.'.'.$permiso;
		}
		
		$usuario['id'] = $post->id;
		$usuario['nombre'] = $post->nom;
		$usuario['usuario'] = $post->usuari;
		$usuario['email'] = $post->email;
		$usuario['password'] = $pass;
		$usuario['menu_defecto'] = $this->usuariosUtils->setMenuDefecto($post->gestor_defecto,$post->permiso_gestor_defecto);
		$usuario['menu_sup'] = $this->usuariosUtils->setMenuSup($aux);
		$usuario['rol'] = $post->rol;
		$usuario['activo'] = true;
		
		echo json_encode($this->usuariosDao->updateUsuario($usuario));
				
	}
	
	function getListaUltimaConexionUsuarios(){
		if(Request::ajax()){
			$usuariosDao = new UsuariosDao();
			return Response::json(DatatablesUtils::listadoUltimaConexion($usuariosDao->getUsuariosUltimaConexion()));
		}
	}
	
	function perfilUsuario($id){
		$this->getMenuUsuario();
		$usuariosDao = new UsuariosDao();
		
		$aux['info'] = $usuariosDao->getUsuarioPorId($id);
		$aux['mas'] = UsuariosUtils::infoPerfilUsuario($aux['info']);
		$this->layout->content = View::make('usuarios.perfil_usuario',array('usuario' => $aux));
	}
	
	function updateColorMenu(){
		if(Request::ajax()){
			$usuariosDao = new UsuariosDao();
			$post = Funciones::getPost();
			return Response::json($usuariosDao->updateColor('color_menu',$post->color,$post->usuario));
		}
		
	}
	
	function updateColorHeader(){
		if(Request::ajax()){
			$usuariosDao = new UsuariosDao();
			$post = Funciones::getPost();
			return Response::json($usuariosDao->updateColor('color_header',$post->color,$post->usuario));
		}
	}
	
	function updateLeftMenu(){
		if(Request::ajax()){
			$usuariosDao = new UsuariosDao();
			$post = Funciones::getPost();
			return Response::json($usuariosDao->updateLeftMenu($post->id,$post->valor));
		}
	}
	
	function validar_codigo(){
		
	}
		
	function __destruct(){
		$this->usuariosDao;
		$this->usuariosUtils;
		$this->funcionesUtils;
	}
	
}

?>